package com.lxd.api.filter.Impl;

import com.lxd.api.feign.cacheClient;
import com.lxd.api.filter.CheckFilter;
import com.lxd.common.constants.ApiConstant;
import com.lxd.common.constants.CacheConstant;
import com.lxd.common.enums.ExceptionEnums;
import com.lxd.common.exception.ApiException;
import com.lxd.common.model.StandardSubmit;
import lombok.extern.slf4j.Slf4j;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Map;
import java.util.Set;

@Service(value = "template")
@Slf4j
public class TemplateCheckFilter implements CheckFilter {
    @Autowired
    private cacheClient client;


    @Override
    public void check(StandardSubmit submit) {
        log.info("【接口模块-校验模板】   开始校验~");

        log.info("【接口模块-校验模板】  正在获取text中的模板~");
        String text = submit.getText();
        String sign = submit.getSign();

        //replace 方法 直接将【】的内容去除用“”代替
        text = text.replace(ApiConstant.SING_PREFIX + sign + ApiConstant.SING_SUFFIX, "");

        log.info("【接口模块-校验模板】  正在获取客户拥有的模板~");
        //得到所有模板
        Integer signId = submit.getSignId();
        Set<Map> templates = client.smembers(CacheConstant.CLIENT_TEMPLATE + signId);
        log.info("【接口模块-校验模板】 开始对比");
        for (Map temp : templates) {
            //具体的模板内容
            String AllTemp =(String) temp.get(ApiConstant.TEMPLATE_TEXT);
            if (text.equals(AllTemp)){
                log.info("【接口模块-校验模板】 template校验成功！");
                return;
            }
            // 模板中有#且有两个# （针对模板中只有一个code的判断）
            if (AllTemp!=null && AllTemp.contains(ApiConstant.TEMPLATE_POUND)
                    &&AllTemp.length()-AllTemp.replaceAll(ApiConstant.TEMPLATE_POUND,"").length()==2){
                //截取 ："您的验证码是"
                String AllTempPrefix = AllTemp.substring(0,AllTemp.indexOf(ApiConstant.TEMPLATE_POUND));

                // 截取： "。如非本人操作，请忽略本短信"
                String AllTempSuffix=AllTemp.substring(AllTemp.lastIndexOf(ApiConstant.TEMPLATE_POUND)+1);
                // 判断发来的短信中 是否包含前后缀
                if (text.contains(AllTempPrefix)&&text.contains(AllTempSuffix)){
                    log.info("【接口模块-校验模板】 template校验成功！");
                    return;
                }
            }
        }
        log.info("【接口模块-校验模板】template校验失败！");
        throw new ApiException(ExceptionEnums.ERROR_TEMPLATE);

    }
}
